Migration from 6.X to 7.X
The new version 7.X.X of our Android SDK introduces the following changes:
- We removed the
Events.Requiredinterface and divided it into 3 different interfaces for a simpler and smoother integration. - All financial operations will now be returning an OperationStartResult object instead of a boolean to indicate that the operation was successfully sent to the payment terminal:
- The MAIN reason why we are now returning an object is because we want to give you access to the
transactionReferencefield inside theOperationStartResultobject. ThetransactionReferencefield is a unique identifier for the transaction that you will receive immediately after sending the transaction request to the terminal. If for any reason you do not receive theTransactionResultobject at the end of the transaction you will now be able to use thetransactionReferenceto directly query our Gateway and know instantly if the transaction for which you do not know the outcome was approved or declined.
- The MAIN reason why we are now returning an object is because we want to give you access to the
- We are introducing a new feature called duplicate payment check. Looking back at our data we have seen that when a merchant is not 100% sure of the transaction outcome, they will reprocess the transaction leading to the cardholder being charged twice. In order to avoid this scenario, we are now flagging the duplicate transaction and prompting a menu to the cardholder/merchant to confirm/cancel the 2nd charge, this menu is pushed by our SDK and will automatically be displayed on top of your own UI when required. We are only prompting the duplicate menu in case the same card is used twice in a row to process a transaction for the same amount within a 5 minutes timeframe. The duplicate payment check feature will be enabled by default in the Android sdk 7.0.0 and can be disabled by passing a false value as part of the sale options
saleOptions.setCheckDuplicates(false);. - The
deviceCapabilitiesevent has been renamed tosupportedCardBrands. - The
saleAndTokenizemethod has been removed. Since Android SDK 7.0.0, asaleAndTokenizeOptionsobject needs to be passed in 'options' parameter of financial operations methods likesale.
1. New Interfaces
For an easier integration with our SDK we removed the Events.Required interface and divided it into 3 different interfaces:
Events.SmartposRequiredwhich are the mandatory events to subscribe to for a PAX integration.Events.MposRequiredwhich are the mandatory events to subscribe to for an HiLite integration.Events.PosRequiredwhich are the mandatory events to subscribe to if you are doing both a PAX AND HiLite integration.
Here is the list of events being part of each interface:
Interface SmartposRequired
Events.PendingResultsEvents.ConnectionStatusChangedEvents.CurrentTransactionStatusEvents.EndOfTransaction
Interface MposRequired
Events.PendingResultsEvents.ConnectionStatusChangedEvents.CurrentTransactionStatusEvents.EndOfTransactionEvents.DeviceDiscoveryFinishedEvents.SignatureRequired
Interface PosRequired
Events.PendingResultsEvents.ConnectionStatusChangedEvents.CurrentTransactionStatusEvents.EndOfTransactionEvents.DeviceDiscoveryFinishedEvents.SignatureRequired
The changes required for each of the above scenarios is described below.
Android Native Integration (PAX)
Older Implementation (Android SDK 6.X)
- Java
- Kotlin
public class HandpointDelegate implements
Events.Required,
Events.CurrentTransactionStatus,
Events.ConnectionStatusChanged,
Events.EndOfTransaction,
Events.TransactionResultReady {
class KotlinClient:
Events.Required,
Events.CurrentTransactionStatus,
Events.ConnectionStatusChanged {
Current Implementation (Android SDK 7.X)
- Java
- Kotlin
public class HandpointDelegate implements
Events.SmartposRequired,
Events.CurrentTransactionStatus,
Events.ConnectionStatusChanged,
Events.EndOfTransaction,
Events.TransactionResultReady {
class KotlinClient: Events.SmartposRequired {
Bluetooth Integration (HiLite)
Older Implementation (Android SDK 6.X)
- Java
- Kotlin
public class HandpointDelegate implements
Events.Required,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus,
Events.SignatureRequired,
Events.EndOfTransaction,
Events.DeviceDiscoveryFinished,
Events.TransactionResultReady {
class KotlinClient:
Events.Required,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus {
Current Implementation (Android SDK 7.X)
- Java
- Kotlin
public class JavaClient implements
Events.MposRequired,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus,
Events.SignatureRequired,
Events.EndOfTransaction,
Events.DeviceDiscoveryFinished,
Events.TransactionResultReady {
class KotlinClient: Events.MposRequired {
Bluetooth and Android Native Integration (PAX & HiLite)
Older Implementation (Android SDK 6.X)
- Java
- Kotlin
public class HandpointDelegate implements
Events.Required,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus,
Events.SignatureRequired,
Events.EndOfTransaction,
Events.DeviceDiscoveryFinished,
Events.TransactionResultReady {
class KotlinClient:
Events.Required,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus {
Current Implementation (Android SDK 7.X)
- Java
- Kotlin
public class JavaClient implements
Events.PosRequired,
Events.ConnectionStatusChanged,
Events.CurrentTransactionStatus,
Events.SignatureRequired,
Events.EndOfTransaction,
Events.DeviceDiscoveryFinished,
Events.TransactionResultReady {
class KotlinClient: Events.PosRequired {
2. All financial operations are now returning an OperationStartResult object instead of a boolean
The methods affected by this change are the following:
3. Disabling the duplicate payment check service
This functionality is only available for SmartPos devices (PAX).
By default, the duplicate payment check service is enabled. If you want to manually disable this service you will need to set the checkDuplicate field to false using the SaleOptions parameter. Here is an example:
public void pay(BigInteger amount, Currency currency) {
SaleOptions saleOptions = new SaleOptions();
saleOptions.setCheckDuplicates(false);
this.api.sale(amount, currency, saleOptions);
}
You can disable the duplicate check functionality for the following financial operations:
4. The deviceCapabilities event has been renamed to supportedCardBrands
Check out the card brand display object.
5. The saleAndTokenize method has been removed. Since Android SDK 7.0.0, a saleAndTokenizeOptions object needs to be passed in 'options' parameter of financial operations methods like sale
Check out the Sale and Tokenize Card section.